正则表达式种双反斜杠问题\\

您所在的位置:网站首页 正则表达式sql 特殊字符转译 需要几个反斜杠 正则表达式种双反斜杠问题\\

正则表达式种双反斜杠问题\\

2024-07-02 19:56| 来源: 网络整理| 查看: 265

 

var re1 = /\d+\.\d+/; alert(re1);//结果是 /\d+\.\d+/ 和声明的正则re1一样 /*这里的 n(n>0)个数字 符号点 n(n>0)个数字 既:9.9、12.134、56362.151415 等 */ var str1 = '134.32'; alert(re1.test(str1));//true

 

/*接下来 我们根据感觉改成用new RegExp声明正则*/

var re2 = new RegExp('\d+\.\d+'); alert(re2);//结果 /d+.d+/

 

//根据我们弹出的 正则表达式/d+.d+/分析 /*可见输出的结果并不是我们想要的正则表达式,这个表达式的意思: d+表示 n(n>0)个d .表示匹配除换行符意外的任意字符 后边d+表示 n(n>0)个d。 既 d.d 、dd.dd 、dad、ddydd 等 */

var str2 = 'ddyd'; alert(re2.test(str2));//true

那么 问题出在了哪里,我们来分析一下,我们都知道正则表达式它本质上 也是一个字符串,但是功能比一般的字符串要强很多,所以可以称作是 超级字符串。我们在用new RegExp('正则')声明正则表达式的时候, 可以看出是用引号包着的,我们都知道在js里,' '引号可以用来声明 字符串(/ / 用来声明正则)。所以这里更可以看出是正则表达式也 是字符串了。 而在字符串里 反斜杠\是有特殊含义的,就是用来转移字符。 所以我们我们上面写的new RegExp('\d+\.\d+');就有问题了。 本来我们是想用\d表示匹配任意的数字的。配合元字符+后有n(n>0) 个数字的。 因为反斜杠\有转义的意思所上面的 \d 被转义成了d \. 被转义成了. (.点在正则中表示匹配除换行符以外的 任意字符) 所以被引号包着的正则表达式字符串'\d+\.\d+'被转换成真正 的正则表达式之后就成了/d+.d+/ 所以就有了上面描述的现象。

/*既然如此我们只要合理的利用转义字符反斜杠\,就可以使用 new RegExp('')声明的正则和直接用 / / 声明的正则达到一样的效 果。

思路: 1.确定我们想要的正则表达式:/\d+\.\d+/ 【注】两边的斜杠 / 是用来声明正则的,里面的内容\d+\.\d+是 表达式的式子,式子和 斜杠/合起来才叫正则表达式 2.把正则表达式的式子放到引号(字符串)里'\d+\.\d+',很明显这样是不 行的,里面的反斜杠\被当成了用来转义标识,所以我们要把 再加一个 \,即:'\\d+\\.\\d+'这样第一个反斜杠\就把第二个反斜杠\转成了反斜杠\ 这样这个字符串''正则,转换成斜杠/ / 正则的时候就成了我们想要的/ \d+\.\d+/了。 */

//下面我们进行测试一下

var re3 = new RegExp('\\d+\\.\\d+'); alert(re3);//结果 /\d+\.\d+/ var str3 = '32.1'; alert (re3.test(str3)); //true

 

/*可以看出现在达到里我们向要的效果,从alert(re3);得到的结果/\d+\.\d+/就可以看出没错了。 转义标识反斜杠\在通过new RegExp('\\d+\\.\\d+')声明的正则和 / /声明的正则中都内转义, 在/\d+\.\d+/这里边为什么没有把\d转成d? 因为/\d+\.\d+/这种形式就是正则表达式的形式,而在正则表达式里有明文规定\d这种写法代 表的意思,所以在执行正则表达式的时候遇到反斜杠\后,一看后面还有个d自然就不转义。(\d这 种具有特殊含义的字符叫做元字符)。 但是通过new RegExp 加字符串'';声明的,因为这些有特殊含义的字符在字符串里他们并不认为 有特殊含义。所以要多加一个\,这样等转换成斜杠/ /方式的时候还有一个反斜杠\.*/

/*在这里我们再附加一个小例子 用new的方式声明正则表达式。可以匹配字符串hello,e和l之间有n(n>0)个+号; */

var re4 = new RegExp('he\\++llo'); /*第一个\是转义标识负责把第二\转换成符号\ 然而在/he\++llo/里\又成了一个转义标识,他把后面的+从正则表达式的重复字符变成了 纯符号+,紧随其后的+因为没有转义,所以它是正则的重复字符,多以他代表有n(n>0)个 前面的符号+*/ alert(re4); //结果 /he\++llo/ var str4 = 'he+++++llo'; alert(re4.test(str4));//true

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3